package com.benito.main;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import com.benito.entities.Configuracion;
import com.benito.entities.ConsultasBBDD;
import com.benito.entities.Cuadro;
import com.benito.entities.Utils;

public class LeerFichero_EjemploBaseDeDatosBenito {
	
	private static final Logger logger = Logger.getLogger(LeerFichero_EjemploBaseDeDatosBenito.class);
	
	public static void main(String [] args) throws BiffException, IOException, ClassNotFoundException, SQLException {
			
		try{
			File fichero = new File("log/benito.log");
			fichero.delete();
		}catch(Exception e){
			//
		}
		PropertyConfigurator.configure(args[0]+args[2]);
		Configuracion conf = new Configuracion(args[0], args[1]);

		Class.forName(conf.getBBDD_DRIVER());		
		Connection conexion = DriverManager.getConnection ("jdbc:mysql://"+conf.getBBDD_HOST()+"/"+conf.getBBDD_DATABASE(),conf.getBBDD_USER(), conf.getBBDD_PASSWORD());
		Statement s = conexion.createStatement();		
		Utils utils = new Utils();
		
		ConsultasBBDD consultasBBDD = new ConsultasBBDD(s);
		LeerFichero_EjemploBaseDeDatosBenito leer = new LeerFichero_EjemploBaseDeDatosBenito();
		
		logger.info("INICIO DE LA CARGA DE FICHERO - Benito Web");
		
		//Borramos resultados antiguos
		logger.info("Borrado de tabla 'Cuadros'");
		consultasBBDD.deleteAllCuadros();
		
		//Leemos el fichero Excel
		Workbook workbook = null;
		try{
			workbook = Workbook.getWorkbook(new File("files/"+conf.getARCHIVO()));
		}catch(Exception e){
			logger.error(e);
			utils.stop();
		}
		Sheet sheet = workbook.getSheet("Hoja1");
		
		if(sheet==null){
			logger.error("La pagina del archivo donde se encuetran los cuadros no se llama -Hoja1-");
			utils.stop();
		}
		logger.info("");
				
		logger.info("Inicio de Lectura de Grupos en BBDD");
		HashMap<String, String> grupos = consultasBBDD.getHashGrupos();
		logger.info("Fin de Lectura de Grupos en BBDD");
		
		logger.info("");
		
		logger.info("Inicio de Lectura de SubGrupos en BBDD");		
		HashMap<String, String> subGrupos = consultasBBDD.getHashSubGrupos();
		logger.info("Fin de Lectura de SubGrupos en BBDD");
		
		logger.info("");
		
		logger.info("Inicio de lectura del fichero - "+conf.getARCHIVO()+" -");
		logger.info("");
		
		File fichero = new File("cuadros nuevos/cuadros.sql");
		FileWriter ficheroWrite=null;
		try{
			fichero.delete();
			
			PrintWriter pw = null;
			ficheroWrite = new FileWriter("cuadros nuevos/cuadros.sql", true);
            pw = new PrintWriter(ficheroWrite);                
            pw.println("DELETE FROM cuadros;".trim());            
            pw.println("COMMIT;");
		}catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
           // Nuevamente aprovechamos el finally para 
           // asegurarnos que se cierra el fichero.
           if (null != ficheroWrite)
        	   ficheroWrite.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }
		
		try{
			for(int i=1; i<sheet.getRows(); i++){				
				Cuadro cuadro = leer.getCuadroDeFilaXLS(sheet, i, grupos, subGrupos);			
				consultasBBDD.insertarCuadro(cuadro);
			}
		}catch(Exception e){
			logger.error(e);
			logger.error("Se ha producido un error en la lectura del fichero. Comprobar que la pagina del excel se llame - Hoja1 -!!!");
			utils.stop();			
		}
		logger.info("");
		logger.info("Fin de lectura del fichero - "+conf.getARCHIVO()+" -");
		
		logger.info("");
		              
        workbook.close();       
		
        logger.info("FIN DE LA CARGA DE FICHERO - Benito Web");
        utils.stop();
	
	}
	
	private Cuadro getCuadroDeFilaXLS(Sheet sheet, int fila, HashMap<String, String> grupos, HashMap<String, String> subGrupos){
		Utils utils = new Utils();
		Cell celda = null;
		
		Cuadro cuadro = null;
		try{
			int i=0;
			celda = sheet.getCell(i++, fila);
			String id = utils.limpiarTexto(celda.getContents());			
						
		    celda= sheet.getCell(i++, fila);						
			String titulo = utils.limpiarTexto(celda.getContents());					
				
			celda= sheet.getCell(i++, fila);			
			String grupo = utils.limpiarTexto(celda.getContents());
			
			celda= sheet.getCell(i++, fila);			
			String subGrupo = utils.limpiarTexto(celda.getContents());
			
			celda= sheet.getCell(i++, fila);			
			String medidas = utils.limpiarTexto(celda.getContents());
			
			celda= sheet.getCell(i++, fila);			
			String anyo = utils.limpiarTexto(celda.getContents());
			
			celda= sheet.getCell(i++, fila);			
			String tecnica = utils.limpiarTexto(celda.getContents());
			
			celda= sheet.getCell(i++, fila);			
			String lugar = utils.limpiarTexto(celda.getContents());
			
			celda= sheet.getCell(i++, fila);			
			String activo = utils.limpiarTexto(celda.getContents());
			
			celda= sheet.getCell(i++, fila);			
			String nombreFoto = utils.limpiarTexto(celda.getContents());
			
			//Personalizamos algunos campos
			medidas = utils.prepararMedidas(medidas);
			titulo = utils.capitalizarTexto(titulo);
			lugar = utils.capitalizarTexto(lugar);
			
			grupo = utils.quitarAcentos(grupo).toLowerCase();			
			subGrupo = utils.quitarAcentos(subGrupo).toLowerCase();
			
			String idGrupo = grupos.get(grupo);
			String idSubGrupo = subGrupos.get(subGrupo);
			
			
			
			id = id.trim();			
			titulo = titulo.trim();					
			grupo = grupo.trim();
			subGrupo = subGrupo.trim();
			medidas = medidas.trim();
			anyo = anyo.trim();
			tecnica = tecnica.trim();
			lugar = lugar.trim();
			activo = activo.trim();
			nombreFoto = nombreFoto.trim();
						
			if(idGrupo==null){
				logger.error("Grupo -"+grupo+"- sin id encontrado !!!");	
				logger.error("Los grupos posibles aparecen al principio de esta ventana. Compruebe que "+grupo+" no aparece en esa lista ");				
				utils.stop();				
			}

			if(idSubGrupo==null){
				logger.error("Subgrupo -"+subGrupo+"- sin id encontrado !!! ");
				logger.error("Los subgrupos posibles aparecen al principio de esta ventana. Compruebe que "+subGrupo+" no aparece en esa lista ");
				utils.stop();				
			}
			idGrupo = idGrupo.trim();
			idSubGrupo = idSubGrupo.trim();
						 			 
			cuadro = new Cuadro(nombreFoto, titulo, idGrupo, idSubGrupo,
					medidas, anyo, tecnica, lugar,
					activo);
			
		}catch(Exception e){
			e.printStackTrace();
			//
		}
		
		return cuadro;		
	}
	
}
